// 验证码
package captcha

import (
	"context"
	"goHelpers/app/entity"

	captchaHelper "gitee.com/copylian/lian-go.git/helper/captcha"
)

// Generate 获取验证码
func Generate(ctx context.Context, configData map[string]interface{}) (entity.Captcha, error) {
	// 返回值
	rdata := entity.Captcha{}

	// 格式：captchaHelper.Generate(ctx, map[string]string{"type": "digit", "store": "redis", "storeDbName": "default", "width":240, "height":80, "length":6})
	// 验证码类型type：audio-语音、string-字符串、math-数学、chinese-中文、digit-数字
	// 存储store：redis，默认是 base64Captcha.DefaultMemStore
	// 存储storeDbName：连接的存储库，如redis连接redis.yaml文件中的default配置
	// rdata, cErr := captchaHelper.Generate(c.GCtx, map[string]interface{}{
	// 	"type":        "digit",                // audio-语音、string-字符串、math-数学、chinese-中文、digit-数字，不存在或者空着默认digit
	// 	"store":       "redis",                // redis存储，不存在或者空着默认使用base64Captcha.DefaultMemStore
	// 	"storeDbName": "default",              // redis连接实例
	// 	"width":       constant.CaptchaWidth,  // 宽度，不存在或者空着默认240
	// 	"height":      constant.CaptchaHeight, // 高度，不存在或者空着默认80
	// 	"length":      constant.CaptchaLength, // 长度，不存在或者空着默认6
	// })
	id, b64s, cErr := captchaHelper.Generate(ctx, configData)
	if cErr != nil {
		return rdata, cErr
	}

	// 返回
	captchaLength := 6
	if val, ok := configData["length"].(int); ok && val != 0 {
		// 断言
		captchaLength = val
	}
	rdata = entity.Captcha{
		Id:     id,
		Image:  b64s,
		Length: captchaLength,
	}
	return rdata, nil
}

// Verify 验证验证码
func Verify(ctx context.Context, captchaId, Captcha string, configData map[string]interface{}) bool {
	// 格式：captchaHelper.Generate(ctx, map[string]string{"store": "redis", "storeDbName": "default"})
	// 存储store：redis，默认是 base64Captcha.DefaultMemStore
	// 存储storeDbName：连接的存储库，如redis连接redis.yaml文件中的default配置
	// res := captchaHelper.Verify(c.GCtx, captchaId, Captcha, map[string]interface{}{
	// 	"store":       "redis",   // redis存储，不存在或者空着默认使用base64Captcha.DefaultMemStore
	// 	"storeDbName": "default", // redis连接实例
	// })
	return captchaHelper.Verify(ctx, captchaId, Captcha, configData)
}
